home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
CU Amiga Super CD-ROM 11
/
CU Amiga Magazine's Super CD-ROM 11 (1997)(EMAP Images)(GB)(Track 1 of 3)[!][issue 1997-06].iso
/
cucd
/
programming
/
oberonv4
/
source
/
system
/
amigamath.mod
(
.txt
)
< prev
next >
Wrap
Oberon Text
|
1996-06-02
|
5KB
|
162 lines
Syntax20b.Scn.Fnt
ParcElems
Alloc
Syntax24b.Scn.Fnt
Syntax10.Scn.Fnt
Syntax10b.Scn.Fnt
FoldElems
(* AMIGA *)
MODULE AmigaMath; (* RD 6.8.1995, updated OJ 30 Apr 96 *)
IMPORT
SYSTEM, E:=AmigaExec;
mathSBBase-, mathSTBase- : E.LibraryPtr;
mathSBVersion-, mathSTVersion- : INTEGER;
termEntry : E.TermEntry;
CONST
mathSBName*="mathieeesingbas.library";
mathSTName*="mathieeesingtrans.library";
PROCEDURE -ReturnD0 04EH,05EH, 04EH,075H;
PROCEDURE Entier*(s: REAL): LONGINT;
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -90, mathSBBase );
SYSTEM.CALL( -30, mathSBBase );
ReturnD0
END Entier;
PROCEDURE IntToReal*(l: LONGINT; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, l );
SYSTEM.CALL( -36, mathSBBase );
SYSTEM.GETREG( 0, d )
END IntToReal;
PROCEDURE Cmp*(s1, s2: REAL): LONGINT;
(* 1 if s1>s2 0 if s1=s2 -1 if s1<s2 *)
BEGIN
SYSTEM.PUTREG( 0, s1 );
SYSTEM.PUTREG( 1, s2 );
SYSTEM.CALL( -42, mathSBBase );
ReturnD0
END Cmp;
PROCEDURE Tst*(s: REAL): LONGINT;
(* 1 if s>0 0 if s=0 -1 if s<0 *)
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -48, mathSBBase );
ReturnD0
END Tst;
PROCEDURE Abs*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -54, mathSBBase );
SYSTEM.GETREG( 0, d )
END Abs;
PROCEDURE Neg*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -60, mathSBBase );
SYSTEM.GETREG( 0, d )
END Neg;
PROCEDURE Add*(s1, s2: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s1 );
SYSTEM.PUTREG( 1, s2 );
SYSTEM.CALL( -66, mathSBBase );
SYSTEM.GETREG( 0, d )
END Add;
PROCEDURE Sub*(s1, s2: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s1 );
SYSTEM.PUTREG( 1, s2 );
SYSTEM.CALL( -72, mathSBBase );
SYSTEM.GETREG( 0, d )
END Sub;
PROCEDURE Mul*(s1, s2: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s1 );
SYSTEM.PUTREG( 1, s2 );
SYSTEM.CALL( -78, mathSBBase );
SYSTEM.GETREG( 0, d )
END Mul;
PROCEDURE Div*(s1, s2: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s1 );
SYSTEM.PUTREG( 1, s2 );
SYSTEM.CALL( -84, mathSBBase );
SYSTEM.GETREG( 0, d )
END Div;
(*---------------------------------------------------*)
PROCEDURE Arctan*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -30, mathSTBase );
SYSTEM.GETREG( 0, d )
END Arctan;
PROCEDURE Cos*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -42, mathSTBase );
SYSTEM.GETREG( 0, d )
END Cos;
PROCEDURE Sin*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -36, mathSTBase );
SYSTEM.GETREG( 0, d )
END Sin;
PROCEDURE Ln*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -84, mathSTBase );
SYSTEM.GETREG( 0, d )
END Ln;
PROCEDURE Exp*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -78, mathSTBase );
SYSTEM.GETREG( 0, d )
END Exp;
PROCEDURE Sqrt*(s: REAL; VAR d: REAL);
BEGIN
SYSTEM.PUTREG( 0, s );
SYSTEM.CALL( -96, mathSTBase );
SYSTEM.GETREG( 0, d )
END Sqrt;
PROCEDURE Ratio*(s1, s2: LONGINT; VAR d: REAL);
(* returns s1/s2 *)
VAR r1,r2: REAL;
BEGIN
IntToReal(s1, r1);
IntToReal(s2,r2);
Div(r1,r2,d)
END Ratio;
PROCEDURE e*(VAR d: REAL);
BEGIN
d:=SYSTEM.VAL(REAL, 0402DF854H)
END e;
PROCEDURE pi*(VAR d: REAL);
BEGIN
d:=SYSTEM.VAL(REAL, 040490FDBH)
END pi;
PROCEDURE Init;
TYPE LibraryPtr=POINTER TO E.Library;
VAR lib:LibraryPtr;
BEGIN
mathSBBase:=E.OpenLibrary(mathSBName,37);
IF mathSBBase=0 THEN HALT(99) END;
lib:=SYSTEM.VAL(LibraryPtr,mathSBBase);
mathSBVersion:=lib.version;
mathSTBase:=E.OpenLibrary(mathSTName,37);
IF mathSTBase=0 THEN HALT(99) END;
lib:=SYSTEM.VAL(LibraryPtr,mathSTBase);
mathSTVersion:=lib.version
END Init;
PROCEDURE Term;
BEGIN
E.CloseLibrary( mathSTBase );
E.CloseLibrary( mathSBBase )
END Term;
BEGIN
Init;
E.Register(termEntry, Term);
END AmigaMath.